package cn.vehicle.biz.core.support;

import cn.vehicle.domains.ctx.PlateDetectContext;

/**
 * 车牌识别业务支持接口
 * <p>
 * 定义车辆识别相关的统一业务操作接口，包括进厂、出厂及通行记录逻辑。
 * 各车辆类型（如运输车辆、普通车辆等）可通过实现该接口完成各自的业务流程。
 * </p>
 *
 * <p>主要职责：</p>
 * <ul>
 *   <li>定义车辆进厂与出厂的校验规则；</li>
 *   <li>提供通行信息记录接口；</li>
 *   <li>支持多种车辆类型的业务扩展（策略模式）。</li>
 * </ul>
 */
public interface PlateDetectSupport {

    /**
     * 返回当前支持类的车辆类型标识
     *
     * @return 车辆类型标识（如 TRANSPORT、COMMON 等）
     */
    String supportName();

    /**
     * 处理车辆进厂逻辑
     * <p>校验车辆是否允许进入工厂。</p>
     *
     * @param plateDetectContext 车牌识别上下文对象，包含车辆信息、相机信息等
     */
    void processIn(PlateDetectContext plateDetectContext);

    /**
     * 处理车辆出厂逻辑
     * <p>校验车辆是否允许出厂。</p>
     *
     * @param plateDetectContext 车牌识别上下文对象
     */
    void processOut(PlateDetectContext plateDetectContext);

    /**
     * 记录车辆进厂通行信息
     * <p>用于生成或更新车辆进厂台账。</p>
     *
     * @param plateDetectContext 车牌识别上下文对象
     */
    void recordIn(PlateDetectContext plateDetectContext);

    /**
     * 记录车辆出厂通行信息
     * <p>用于生成或更新车辆出厂台账。</p>
     *
     * @param plateDetectContext 车牌识别上下文对象
     */
    // 定义车辆出厂信息记录接口，由具体实现类负责处理业务逻辑
    void recordOut(PlateDetectContext plateDetectContext);
}
